package com.tedu.api.list;

import org.junit.Test;

import java.awt.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.concurrent.Callable;

/**
 * 存放相同的数据--->数组
 * 数组定义：int[] i=new int[10];     定长度
 * 需求：存898个元素，不限制任意类型【基本数据类型|引用类型】
 * 集合解决上述问题
 * 集合：可以存不确定的元素数，存任意类型，也可以【限定类型】【重点】
 * 包位置：Java.util
 * Collection    顶级容器       接口
 * 作用：集合中提供了所有的容器的通用方法，维护元素，操作元素！
 * <p>
 * Collection  顶级接口---创建对象，两个常用的子接口：
 * List集合【接口】：可重复集合，并且有序【存储特点】
 * List子接口下：ArrayList  数组集合
 * Set集合【接口】：不可重复集合【储存特点】
 * <p>
 * 创建顶级集合对象-----多态----接口    引用=new   子接口【实现类】（）;
 */
public class CollectionAPI {
    /**
     * Collection对象方法
     * add（）方法     返回值：boolean
     * 语法：add（任何类型元素）
     * 作用：向当前集合中添加给定元素，可以为任意类型！
     * 如果元素存入成功，返回true，元素存入失败，返回false
     * size（）方法     返回值：int
     * 作用：返回集合的个数---【数组length：返回数组的长度】
     * isEmpty（）方法    返回值：boolean
     * 作用：判断元素是否为空 返回集合元素有值【不是空】  返回值false
     * 没有值 【是空的】   返回值 true
     * clear（）方法      返回值：void
     * 作用：清空集合元素
     */
    @Test
    public void testCollection() {
        //创建【容器】顶级集合：不定长，无限存储【集合尽量存相同数据】
        Collection c = new ArrayList();
        c.add("one");
        c.add(2);
        c.add(new Frame());
        c.add(true);
        c.add('1');
        c.add(1.2);
        System.out.println("打印容器【顶级集合】" + c);
        System.out.println("打印集合个数" + c.size());
        c.clear();                   //清空了元素
        boolean b = c.isEmpty();
        System.out.println("集合中是否存在元素" + b);
    }

    /**
     * remove（）     返回值：boolean
     * 作用：从集合中删除给定元素，如果删除元素重复，只删除匹配第一元素数据
     * 底层：使用equals方法判断删除元素
     */
    @Test
    public void testRemove() {
        Collection c = new ArrayList();
        c.add("2");
        c.add("3");
        c.add("d");
        c.add("3");
        c.add("4");
        c.add("5");
        System.out.println("集合元素" + c);
        c.remove("3");
        System.out.println("删除集合元素" + c);
    }

    /**
     * addAll(Collection c)方法      返回值：boolean
     * 作用：将给定的集合中所有的元素添加到另外一个集合中，当添加完毕后
     * 返回值为true
     */
    @Test
    public void testAll() {
        //创建第一个集合
        Collection c1 = new ArrayList();
        c1.add("web");
        c1.add("java");
        c1.add("c++");
        //创建第二个集合
        Collection c2 = new ArrayList();
        c2.add("go");
        c2.add("php");
        c2.add("net");
        //并集    c1集合元素添加到c2集合元素中
        boolean b = c1.addAll(c2);
        System.out.println(b);
        System.out.println(c1);
    }

    /**
     * containsAll()  返回值：boolean
     * 作用：判断当前集合是否包含给定集合中的所有元素
     * 判断：两个集合所有的元素是否一致
     * true  两个集合元素【完全一致】
     * false 两个集合元素【可以部分元素不一致】
     */
    @Test
    public void testContainsAll() {
        Collection c1 = new ArrayList();
        c1.add("go");
        c1.add("java");
        Collection c2 = new ArrayList();
        c2.add("java");
        c2.add("go");
        //判断：c1集合是否包含c2集合【集合存入元素顺序不一致】
        boolean b = c1.containsAll(c2);
        System.out.println("c1集合是否包含c2集合元素：" + b);
    }

    /**
     * removeAll（Collection c）             返回值：boolean
     * 作用：删除当前集合中与给定集合中共有元素【交换】
     *      元素判断【底层】：进行一次equals判断
     */
    @Test
    public void testRemoveAll() {
        Collection c1 = new ArrayList();
        c1.add("1");c1.add("2");c1.add("3");
        Collection c2 = new ArrayList();
        c2.add("2");c2.add("1");c2.add("3");
        boolean b=c1.removeAll(c2);
        System.out.println("交集是否成功："+b);   //true
        System.out.println("交集集合的结果："+c1);   //3
    }
}
